package com.tedu.api.thread;

/**
 * 线程常用方法三：
 * 创建普通线程：叫用户线程/前台线程
 * 软件【聊天室】“工厂”----“车间”进程【若干进程】---“车间工人”线程
 * 软件关闭--所有的用户线程全部挂了
 * 所有用户线程全部挂了，进程一定结束
 * 用户线程/前台线程与后台线程/守护线程的特点：
 * 用户线程/前台线程  挂了        后台线程/守护线程     挂调
 *
 * 出现：守护线程又执行一次【问题】
 * 守护线程特性：
 * 守护线程执行是有JVM虚拟机调度以及操作系统有关【调度策略管理】
 * 存在不可预知性，前台线程挂了，守护线程阻塞状态中短时间内迅速调用1次
 *
 * 设置守护线程   线程名：setDaemon(true)  守护线程
 * 基本API：isDaemon  判断线程是否是守护线程
 * 需求：创建两个线程  t1代表露丝   ---阻塞一秒  5秒挂
 * t2代表杰克   ---阻塞一秒  t1挂了t2也挂
 */
public class Thread_Daemon {
    public static void main(String[] args) {
        //t1线程--露丝
        Thread t1 = new Thread(() -> {
            for (int i = 0; i < 5; i++) {
                System.out.println("我是前台线程:露丝·德威特·布卡特");
                try {
                    Thread.sleep(1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        });
        //t1.start();
        //创建t2线程
        Thread t2=new Thread(()->{
            //添加  死循环：每次间隔为一秒
          while (true){
              System.out.println("我是后台/守护线程：杰克·道森");
              try {
                  Thread.sleep(1000);
              } catch (InterruptedException e) {
                  e.printStackTrace();
              }
          }
        });
        /**
         * t2杰克  设置守护线程
         * t1执行五次  线程挂了
         * t2一直执行  设置守护线程  t1挂t2跟着挂
         */
        t2.setDaemon(true);  //t2守护线程
        t1.start();//必须写---启动线程：最后，而且所有线程都需要启动
        t2.start();//启动线程找到线程引用.start()
    }
}
